/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package moteur.carte;

import Interface.util;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Polygon;
import moteur.Terrain;
import moteur.Transport;
import moteur.paquet.PaquetPionTransport;
import moteur.paquet.PionsEnMain;

/**
 *
 * @author nlupins
 */
public class Chemin extends Arc {

    private Transport pionTransport;
    private boolean obstrue;

    /**
     * Constructeur, terrain Plaine par défaut.
     */
    public Chemin() {
        super(Terrain.PLAINE);
    }

    /**
     *  Constructeur, type de terrain en paramêtre.
     * @param t
     */
    public Chemin(Terrain t) {
        super(t);
    }

    /**
     * no comment
     * @return
     */
    public boolean isPionSet() {
        return pionTransport != null;
    }

    /**
     * no comment
     * @param pion
     */
    public void setPion(Transport pion) {
        this.pionTransport = pion;
    }

    /**
     * Retire le pion transport(set à null), et le "remet" dans le paquet d'origine.
     */
    public void resetPion() {

        PaquetPionTransport.getInstance().recevoirPion(pionTransport);
        this.pionTransport = null;

        obstrue = false;
    }

    /**
     *
     * @param pion : à placer sur le chemin
     * @param from : le paquet d'où il est retiré
     * @return
     */
    public boolean placePion(Transport pion, PionsEnMain from) {
        if ((pion.getCout(this.terrain) != 127) && (from.getPaquet()[pion.ordinal()] > 0)) {
            this.pionTransport = pion;
            from.getPaquet()[pion.ordinal()]--;
            return true;
        } else {
            return false;
        }
    }

    /**
     *
     * @return
     */
    public boolean isObstrue() {
        return obstrue;
    }

    /**
     *
     * @return
     */
    public boolean getObstrue() {
        return obstrue;
    }

    /**
     * 
     * @param obstrue
     */
    public void setObstrue(boolean obstrue) {
        this.obstrue = obstrue;
    }

    /**
     *
     * @param depart
     * @return coût (nbre) du transport depuis ville de départ
     */
    @Override
    public int getVal(Ville depart) {
        int tmp = 127;
        if (pionTransport != null) {
            tmp = pionTransport.getCout(terrain);
            if (obstrue) {
                tmp++;
            }
        }

        return tmp;
    }

    /**
     *
     * @return
     */
    @Override
    public Transport getPionTransport() {
        return pionTransport;
    }

    /**
     *
     * @param pion
     */
    public void setPionTransport(Transport pion) {
        pionTransport = pion;
    }

    @Override
    public String toString() {
        String str = super.toString();
        if (pionTransport != null) {
            str += " " + pionTransport.name();
        }
        if (obstrue) {
            str += " " + "Obstacle!";
        }
        return str;
    }
    //@Override

    /**
     *
     * @param g
     * @param tailleCarte
     */
    @Override
   public void draw(Graphics2D g, int tailleCarte) { //, Color col){
        
        int l = (int) (tailleCarte * 0.015f);
        int x1, x2, x3, y1, y2, y3;
        float w;
        w = Clickable.width * 0.5f;
        x1 = (int) (x * tailleCarte);
        y1 = (int) (y * tailleCarte);

        if (orig != null) {
            x2 = (int) ((orig.x + w) * tailleCarte);
            y2 = (int) ((orig.y + w) * tailleCarte);
        } else {
            x2 = x1 + 20;
            y2 = y1 + 20;
        }
        if (dest != null) {
            x3 = (int) ((dest.x + w) * tailleCarte);
            y3 = (int) ((dest.y + w) * tailleCarte);

        } else {
            x3 = x1 - 20;
            y3 = y1 - 20;

        }
        g.setColor(Color.black);
        util.drawChemin(g, x1, y1, x2, y2, l+2);
        util.drawChemin(g, x1, y1, x3, y3, l+2);
        g.setColor(terrain.getColor());
        util.drawChemin(g, x1, y1, x2, y2, l);
        util.drawChemin(g, x1, y1, x3, y3, l);
}

}
